//
//  CZDetailStatusController.swift
//  GZWeibo666
//
//  Created by mac－gt on 15/12/1.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit

import SVProgressHUD
class CZDetailStatusController: UIViewController {
    var status: CZStatus?
    var comments:[CZCommentStatus]=[CZCommentStatus]()
    init(status:CZStatus){
        self.status=status
        
        super.init(nibName: nil, bundle: nil)
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        title="微博详情"
         setUp()
        prepareTableView()
       
    
    }
    func loadComments(){
       let since_id=comments.first?.id ?? 0
        
     CZCommentStatus.loadCommentId((status?.id)!, since_id: since_id, max_id: 0) { (comments, total_number, previous_cursor, next_cursor, error) -> () in
        
            if error != nil {
                print("加载出错: \(error)")
                SVProgressHUD.showErrorWithStatus("加载出错")
                return
            }
            
            print("加载成功:\(comments?.count), next_cursor: \(next_cursor)")
            self.status?.comments_count = total_number!
  
            if comments != nil && comments?.count > 0 {
  
                self.comments = comments! + self.comments
            }
 
            self.tableView.reloadData()
        }
    }
    //加载更多评论数据
    private func loadMoreComment() {
       CZCommentStatus.loadCommentId((status?.id)!, since_id:0, max_id: comments.last?.id ?? 0) { (comments, total_number, previous_cursor, next_cursor, error) -> () in
           self.tableView.infiniteScrollingView.stopAnimating()
        if error != nil{
            SVProgressHUD.showErrorWithStatus("加载失败")
            return
        }
        self.status?.comments_count=total_number!
        self.tableView.showsInfiniteScrolling=next_cursor != 0
        if comments != nil && comments?.count>0{
            self.comments=self.comments+comments!
            self.tableView.reloadData()
        }
        }
    }
  // 添加子控件并约束
    func setUp(){
        view.addSubview(tableView)
        view.addSubview(bottonView)
        tableView.separatorStyle=UITableViewCellSeparatorStyle.None
        tableView.translatesAutoresizingMaskIntoConstraints=false
        bottonView.translatesAutoresizingMaskIntoConstraints=false
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[tb]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["tb" : tableView]))
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[tb]-44-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["tb":tableView]))
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[bo]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["bo":bottonView]))

        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[bv]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["bv" : bottonView]))

        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[tb]-0-[bv(44)]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["tb" : tableView, "bv": bottonView]))
          }
    //设置tableView的代理、数据源并注册cell
    func prepareTableView(){
        tableView.registerClass(CZStatusNormalCell.self, forCellReuseIdentifier: CZStatusReuseIdentifier.NormalCell.rawValue)
        tableView.registerClass(CZPingLunCell.self, forCellReuseIdentifier: "CZPingLunCell")
        tableView.registerClass(CZNoTalkCell.self, forCellReuseIdentifier: "CZNoTalkCell")
        tableView.registerClass(CZStatusForwardCell.self, forCellReuseIdentifier: CZStatusReuseIdentifier.ForwardCell.rawValue)
        tableView.backgroundColor=UIColor.whiteColor()
        tableView.separatorStyle=UITableViewCellSeparatorStyle.None
        tableView.estimatedRowHeight=200
        // 当上啦的时候  加载更多评论数据，并显示菊花
        tableView.addInfiniteScrollingWithActionHandler { () -> Void in
         self.loadMoreComment()
        
        }
        tableView.dataSource=self
        tableView.delegate=self
    }
    //  懒加载各种View空间
    private lazy var tableView=UITableView(frame: CGRect.zero, style: UITableViewStyle.Plain)
    private lazy var topView: CZPingLunTopView={
        let topView=CZPingLunTopView()
        topView.delegate=self
       return topView
    }()
    private lazy var bottonView: CZStatusBottomView={
        let bottonView=CZStatusBottomView()
            bottonView.delegate=self
        return bottonView
    }()
}
extension CZDetailStatusController : UITableViewDelegate,UITableViewDataSource,CZStatusBottomViewDelegate,CZPingLunTopViewDelegate{
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 2
    }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if section==0{
            return 1
        }else{
            if comments.count==0 {
                return 1
            }else{
                return comments.count
            }
        }
    }
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    // 当是第一组的时候 去判断模型的类型是转发微博还是原生微博,在这里我的判断好乱  没有去优化
        if indexPath.section==0{
            if status?.retweeted_status != nil{
                let cell=tableView.dequeueReusableCellWithIdentifier(CZStatusReuseIdentifier.ForwardCell.rawValue) as! CZStatusForwardCell
                cell.status=status
                return cell
            }
            else{
                let cell=tableView.dequeueReusableCellWithIdentifier(CZStatusReuseIdentifier.NormalCell.rawValue) as! CZStatusNormalCell
                cell.status=status
                return cell
            }
        }
            //第二组显示的是评论cell，如果comments不为空就说明有数据
        else{
            
            if comments.count==0{
                let cell=tableView.dequeueReusableCellWithIdentifier("CZNoTalkCell") as! CZNoTalkCell
                cell.message="暂时没有人评论"
                return cell
            }else{
                let comment=comments[indexPath.row]
                let cell=tableView.dequeueReusableCellWithIdentifier("CZPingLunCell") as! CZPingLunCell
                cell.comment=comment
                return cell
            }
        }
    }
    // 取消cell的选中北京
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    }
    //  返回cell的行高  在第一组的时候 根据模型拿到相应的cell  第二组根据约束返回行高
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if indexPath.section==0 {
            let StatusReuseIdentifier = (status?.retweeted_status != nil) ? CZStatusReuseIdentifier.ForwardCell.rawValue : CZStatusReuseIdentifier.NormalCell.rawValue
            let cell=tableView.dequeueReusableCellWithIdentifier(StatusReuseIdentifier) as! CZStatusCell
            let rowHeight=cell.rowHeight(status!)
            return rowHeight
        }else{
            return UITableViewAutomaticDimension
        }
    }
  // 设置头部view  只有在第二组 显示评论cell的时候才需要
    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        if section==1{
        return topView
        }
        else{
            return nil
        }
    }
    //  设置头部view的高度  我开始没设置，显示不出View  找了半天的原因
    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section==1{
            return 44
        }else{
            return 0
        }
    }
    // 点击转发按钮事件
    func sendStatus() {
        //  因为转发和评论用的是同一个控制器 但他们有些控件是不一样的  所以这里用一个枚举去标示
        let vc=CZFowardController(type: CZCommentType.CZCommentTypeSend,status:status)
        presentViewController(UINavigationController(rootViewController: vc), animated: true, completion: nil)
        
    }
    //  点击评论按钮触发事件
    func talkStatus() {
        let vc=CZFowardController(type: CZCommentType.CZCommentTypeTalk,status:status)
         presentViewController(UINavigationController(rootViewController: vc), animated: true, completion: nil)
    }
    //头部View的评论按钮触发事件
    func PingLunTopViewClick() {
        self.loadComments()
    }
}